The rapid growth in data intensive applications continues to fuel the demand for raw data storage capacity. To meet this growing demand, the concept of the network storage systems was introduced. A network storage system is a network having a primary purpose of transferring of data between distributed computer systems and storage devices.
Network storage systems utilize the Internet Small Computer System Interface (iSCSI) protocol, which provides reliable data storage transport over a conventional transmission control protocol/Internet protocol (TCP/IP) network. The iSCSI protocol itself encapsulates small computer system interface (SCSI) commands in protocol data units (PDUs) carried in TCP/IP byte streams. That is, the iSCSI protocol allows network devices that are not connected by the same SCSI bus to communicate with each other over the Internet.
Data integrity is achieved by means of cyclic redundancy check (CRC) techniques. The CRC technique is used for checking and detecting errors in data transmitted over a network. The CRC algorithm and its underlying mathematics are well known to those skilled in the art. CRC value generation is performed when data is transmitted from a host computer to the network. The CRC value is calculated independently for a header and payload data portions included in an iSCSI PDU. The CRC value is calculated for each portion independently and inserted into the PDU at locations reserved the CRC values calculated for the header and payload portions. CRC value checking is performed when an iSCSI PDU is received at the host computer. Here, the CRC value is calculated and compared with a CRC value included in the PDU. The check is performed on both the header and payload portions.
Prior art implementations require the reception of an entire PDU before handling the CRC. Typically, an iSCSI PDU is composed of multiple data TCP segments that may have variable length size and further include data from more than one PDU. These segments are received in no particular order and multiple segments may be received from multiple different connections simultaneously. Therefore, in order to calculate the CRC value related to the payload data of a PDU, prior art implementations construct the entire PDU before handling the CRC. Specifically, these implementations are not design to calculate the intermediate CRC value for partial PDUs (e.g., TCP segments) while these partial PDUs are received or transmitted to the network. As an example, U.S. patent application Ser. No. 10/456,871 discloses a transport off-load engine (TOE) that performs CRC operations on iSCSI PDUs. The disclosed TOE receives a complete iSCSI PDU assembled by the host computer, calculates the CRC value, and sends the result back to the host computer.
It would be therefore advantageous to provide an efficient solution for performing CRC operations on partial PDUs.